package sistemaEnemigo;

import escenario.Escenario;
import escenario.IdPosicion;
import escenario.Misil;
import java.lang.StrictMath;

public class MisilEnemigo extends Misil {
	
	private IdPosicion PE = new IdPosicion();
	private boolean alive = true;

	public MisilEnemigo(Escenario es){
		this.setEscenario(es);
		this.getEscenario().addMisilesEnemigos(this);
	}

	public IdPosicion getIdPosicion() {
		return PE;
	}
	
	public boolean isAlive() {
		return alive;
	}
	
	public void setAlive(boolean alive) {
		this.alive = alive;
	}

	public void addPosAbs(){
		PE.setId(this.getId());
		PE.setX(this.getXAbs());
		PE.setY(this.getYAbs());
		PE.setZ(this.getPosicion().getZ());		
		this.getEscenario().addPosEnemigos(PE);
	}
	
	public void setPosAbs(){
		PE.setX(this.getXAbs());
		PE.setY(this.getYAbs());
		PE.setZ(this.getPosicion().getZ());		
		this.getEscenario().setPosEnemigos(PE.getId(), PE);
	}
	
	private double radioTrayectoria(){
		double a, b, c, alfa=this.getPosicion().getTita();
		a=this.getPosicion().getRadio();
		b=this.getDestino().getRadio();
		c=StrictMath.sqrt(a * a + b * b - 2 * a * b * StrictMath.cos((StrictMath.PI / 2) - alfa));
		return c;
	}
	
	private double titaTrayectoria(double rN){
		double radioNuevo, titaViejo, radioDestino, beta, alfa;
		radioNuevo=rN;
		titaViejo=this.getPosicion().getTita();
		radioDestino=this.getDestino().getRadio();
		beta=StrictMath.asin(radioDestino * (StrictMath.sin((StrictMath.PI / 2) - titaViejo)) / radioNuevo);
		alfa = StrictMath.PI - ((StrictMath.PI / 2) - titaViejo) - beta;
		alfa=alfa - (StrictMath.PI / 2);
		
		return alfa;
	}
	
	private void cambiarEje(){
		double radioNuevo=this.radioTrayectoria();
		double titaNuevo=this.titaTrayectoria(radioNuevo);
		this.getPosicion().setTita(titaNuevo);
		this.getPosicion().setRadio(radioNuevo);
	}

	public void mover(){
		this.getPosicion().setRadio(this.getPosicion().getRadio() - 1);
		this.setPosAbs();
	}
	
	public void colision(MisilEnemigo misilImpactado){
		System.out.println("Misil " + this.getId() 
				+ " impacto al misil " + misilImpactado.getId() );
		
		this.getEscenario().setMisilesEnemigos(this.getId(), null);
		this.getEscenario().setPosEnemigos(this.getId(), null);
		
		this.getEscenario().setMisilesEnemigos(misilImpactado.getId(), null);
		this.getEscenario().setPosEnemigos(misilImpactado.getId(), null);
		
		this.setAlive(false);
		misilImpactado.setAlive(false);
	}
	
	public void run(){
		System.out.println("Se ejecuto el misil enemigo: " + this.getId());
		this.setPosicionAbsoluta();
		this.cambiarEje();

		while(this.getPosicion().getRadio() > 0 && isAlive()){
			this.mover();
			
			try { Thread.sleep(300);}
			catch (InterruptedException e) {e.printStackTrace();} 
		}
	}	
}